package pruebas;

import modelo.auto.*;
import modelo.excepciones.InvalidMaxMarchaCajaException;
import junit.framework.TestCase;

public class TestMotor extends TestCase {
	Motor motor;
	final static float timeElapsedTest = 40;// en milisegundos
	
	protected void setUp() throws Exception {
		motor= new Motor();
		

		
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}



	
	public void testUpdate() {

		motor.acelerar(0.95);
		motor.update(timeElapsedTest);
		
		double rpm= motor.getRPM();
		double maxRpm= motor.getMaxRPM();
		double offsetVel= motor.getMaxVelocidad()/ Motor.DEFAULT_MAX_MARCHAS_ALLOWED;
		
		double velocidadEsperada = offsetVel *((rpm / maxRpm)  +  (motor.getCaja().getMarcha() -1));

		assertEquals(velocidadEsperada, motor.getVelocidad());
		

	} 

	public void testAcelerar() {
		double factAcelTot= 1.99;
		motor.acelerar(factAcelTot);
		
		int marcha= motor.getCaja().getMarcha();
		double incremento= Motor.DEFAULT_OFFSET_RPM/ marcha;
		
		double esperadoRPM = 0;
		esperadoRPM += incremento * factAcelTot;
		assertEquals(esperadoRPM, motor.getRPM());

	}
	

	public void testGetVelocidad() {
		motor.acelerar(0.8);
		//esta correcto, ya que si no le doy update, la velocidad no cambia
		assertEquals(0, motor.getVelocidad(), 0.01);
		
		double velEsperada = 120;
		motor.setVelocidad(velEsperada);
		assertEquals(velEsperada, motor.getVelocidad());
	}




	public void testSetMaxVelocidad() {
		double maxVel= Double.MAX_VALUE;
		motor.setMaxVelocidad(maxVel);
		assertEquals(maxVel, motor.getMaxVelocidad());
	}

	

	public void testSetMaxRPM() {
		double maxRpm= 130;
		motor.setMaxRPM(maxRpm);
		assertEquals(maxRpm, motor.getMaxRPM());
	}

	public void testSetCaja() {
		Caja caja = new Caja();
		try {
			motor.setCaja(caja);
		} catch (InvalidMaxMarchaCajaException e) {
			// TODO Auto-generated catch block
			fail("no se pudo agregar la caja");
		}
		assertEquals(caja, motor.getCaja());
	}



}
